iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 14
0
自我挑戰組

利用30分鐘~想一個前端問題系列 第 14

利用30分鐘~想一個前端問題 Day14--sleep

  • 分享至 

  • xImage
  •  

sleep

Delays the execution of an asynchronous function.

Delay executing part of an async function, by putting it to sleep, returning a Promise.

延遲異步函數的執行

const sleep = ms => new Promise(resolve => setTimeout(resolve, ms));
///
async function sleepyWork() {
  console.log("I'm going to sleep for 1 second.");
  await sleep(1000);
  console.log('I woke up after 1 second.');
}

在 async 函數中放入 延遲功能 通過將該函數返回一個promise
因為 await 會等待收到 resolve 之後才會進行後面的動作,如果沒有收到就會一直處在等待的狀態

分析點

1.async

ES7 裡頭 async 的本質是 promise 的語法糖
使用在異步函數時,就會出現 await
async用於申明一個function是異步的,而await可以認為是async wait的簡寫,等待一個異步方法執行完成。

基本語法

async function a(){
  await b();
  .....       // 等 b() 完成後才會執行
  await c();
  .....       // 等 c() 完成後才會執行
  await new Promise(resolve=>{
    .....
  });
  .....       // 上方的 promise 完成後才會執行
}
a();
a().then(()=>{
  .....       // 等 a() 完成後接著執行
});
async function demo() {
    let result = await Promise.resolve(123);
    console.log(result);
}
demo();

Chrome裡申明這樣一個函數,可以在控制台看到返回的其實就是一個Promise對象。

2.promise

promise 顧名思義就是「保證執行之後才會做什麼事情」

const myFirstPromise = new Promise((resolve, reject) => {
  // 執行一些非同步作業,最終呼叫:
  //
  //   resolve(someValue); // 實現
  // 或
  //   reject("failure reason"); // 拒絕
});

參考資料

JavaScript Await 與 Async


上一篇
利用30分鐘~想一個前端問題 Day13-shuffle
下一篇
利用30分鐘~想一個前端問題 Day15-dig
系列文
利用30分鐘~想一個前端問題30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言